package com.company.design.singleton;

/**
 * 懒汉式 单例   什么时候用，什么时候进行初始化。
 * 缺点：虽然解决了需要用的时候进行实例化，但是会带来线程不安全的问题
 * 为了解决线程不安全的问题，可以通过加锁 synchronized解决，但效率也会下降
 */
public class SingletonModeV4 {

    private static SingletonModeV4 INSTANCE;

    private SingletonModeV4() {
    }

    public static synchronized SingletonModeV4 getInstance() {
        // 这个判空在多线程下可能会出现问题
        if (null == INSTANCE) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            INSTANCE = new SingletonModeV4();
        }
        return INSTANCE;
    }

    public void printLog() {
        System.out.println("hello world!!");
    }
}
